home *** CD-ROM | disk | FTP | other *** search
/ Aminet 23 / Aminet 23 (1998)(GTI - Schatztruhe)[!][Feb 1998].iso / Aminet / dev / misc / gms_dev.lha / GMSDev / Source / E / Demos / IntMandel.e < prev    next >
Text File  |  1997-12-06  |  2KB  |  96 lines

  1. /* This is a Mandel generator from the Amiga E archive (which was converted
  2. ** from Oberon) and is now converted to work with GMS.
  3. */
  4.  
  5. MODULE 'dpkernel','dpkernel/dpkernel','graphics/pictures','files/files'
  6. MODULE 'screens','system/register','system/modules','input/joydata'
  7. MODULE 'graphics/screens','blitter','graphics/blitter'
  8.  
  9. CONST ITERDEPTH = 50   /* This constant defines the detail of the mandel */
  10.  
  11. PROC main()
  12.  DEF screen=NIL:PTR TO screen, zr, zi, ar, ai, dr, di, sr, si, st, x, y, i,
  13.      joy       = NIL:PTR TO joydata,
  14.      scrmodule = NIL:PTR TO module,
  15.      bltmodule = NIL:PTR TO module
  16.  
  17.  IF dpkbase := OpenLibrary('GMS:libs/dpkernel.library',0)
  18.   IF (scrmodule := Init([TAGS_MODULE,NIL,
  19.       MODA_NUMBER,    MOD_SCREENS,
  20.       MODA_TABLETYPE, JMP_AMIGAE,
  21.       TAGEND], NIL))
  22.       scrbase := scrmodule.modbase
  23.  
  24.   IF (bltmodule := Init([TAGS_MODULE,NIL,
  25.       MODA_NUMBER,    MOD_BLITTER,
  26.       MODA_TABLETYPE, JMP_AMIGAE,
  27.       TAGEND], NIL))
  28.       bltbase := bltmodule.modbase
  29.  
  30.   IF (screen := Init([TAGS_SCREEN,NIL,
  31.        GSA_Width,      640,
  32.        GSA_Height,     512,
  33.          GSA_BitmapTags, NIL,
  34.          BMA_AmtColours, 16,
  35.          TAGEND,         NIL,
  36.        GSA_ScrMode,    HIRES OR LACED,
  37.        TAGEND],NIL))
  38.  
  39.    x := 256/screen.bitmap.amtcolours*2
  40.    FOR i:=0 TO screen.bitmap.amtcolours-1 DO UpdateColour(screen,i,(Shl(i*x,8) OR (i*x)))
  41.  
  42.    sr := $400000/screen.width   -> shrink horiz
  43.    si := $300000/screen.height  -> shrink vert
  44.    st := $140000*-2             -> move side
  45.    zi := $160000                -> move up
  46.  
  47.    IF (joy := Init(Get(ID_JOYDATA),NIL))
  48.  
  49.     Display(screen)
  50.  
  51.     FOR y:=screen.height-1 TO 0 STEP -1
  52.       zi := zi-si
  53.       zr := st
  54.  
  55.       FOR x:=0 TO screen.width-1
  56.  
  57.         Query(joy)
  58.         IF (joy.buttons AND JD_LMB) THEN JUMP end
  59.  
  60.         i := 0
  61.         ar := zr
  62.         ai := zi
  63.         REPEAT
  64.           dr := Shr(ar,10)
  65.           di := Shr(ai,10)
  66.           ai := dr*2*di+zi
  67.           dr := dr*dr
  68.           di := di*di
  69.           ar := dr-di+zr
  70.           i++
  71.         UNTIL (i>ITERDEPTH) OR (dr+di>$400000)
  72.         DrawPixel(screen.bitmap, x, y, Mod(i, screen.bitmap.amtcolours))
  73.         zr:=zr+sr
  74.       ENDFOR
  75.  
  76.     ENDFOR
  77.  
  78.     REPEAT
  79.       WaitAVBL()
  80.       Query(joy)
  81.     UNTIL (joy.buttons AND JD_LMB)
  82.  
  83. end:
  84.    ENDIF
  85.   ENDIF
  86.   ENDIF
  87.   ENDIF
  88.  Free(joy)
  89.  Free(screen)        
  90.  Free(scrmodule)
  91.  Free(bltmodule)
  92.  CloseDPK()
  93.  ENDIF
  94. ENDPROC
  95.  
  96.